package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.DevicePadAuthCodePO;
import com.itlong.cloud.POJO.VO.operate.OperateDeviceAuthCodeGetDevicePageVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeviceAuthCodeGetPageVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      设备授权码管理持久层接口
 * </desc>
 *
 * @createDate 2019/01/16
 */
@Mapper
@Repository
public interface IOperateDeviceAuthCodeDao {

    /**
     * <desc>
     *      分页获取设备授权码
     * </desc>
     *
     * @param params 查询参数
     * @return 分页获取结果
     * @author wangzhi
     * @createDate 2019/01/16
     */
    List<OperateDeviceAuthCodeGetPageVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备授权码记录数
     * </desc>
     *
     * @param params 查询参数
     * @return 设备授权码记录数
     * @author wangzhi
     * @createDate 2019/01/16
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存设备授权码
     * </desc>
     *
     * @param devicePadAuthCodePOList 插入数据集
     * @return 1成功，0失败
     * @author wangzhi
     * @createDate 2019/01/16
     */
    Integer batchSaveDeviceAuthCode(List<DevicePadAuthCodePO> devicePadAuthCodePOList);

    /**
     * <desc>
     *      查询单个设备授权码
     * </desc>
     *
     * @param params 查询参数
     * @return 单个设备授权码
     * @author wangzhi
     * @createDate 2019/01/21
     */
    OperateDeviceAuthCodeGetPageVO getOne(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备授权码相关设备列表
     * </desc>
     *
     * @param params 查询参数集
     * @return 获取设备授权码相关设备列表分页结果
     * @author wangzhi
     * @createDate 2019/03/12
     */
    List<OperateDeviceAuthCodeGetDevicePageVO> getDevicePage(Map<String, Object> params);

    /**
     * <desc>
     *      获取设备授权码相关设备列表记录数
     * </desc>
     *
     * @param params 查询参数集
     * @return 获取设备授权码相关设备列表分页记录数
     * @author wangzhi
     * @createDate 2019/03/12
     */
    Integer getDeviceRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取可用的设备授权码
     * </desc>
     *
     * @param size 数量
     * @return 可用的设备授权码
     * @author wangzhi
     * @createDate 2019/03/12
     */
    List<DevicePadAuthCodePO> getUsableAuthCode(@Param("size") Integer size);

    /**
     * <desc>
     *      批量更新
     * </desc>
     *
     * @param updateList 更新参数集
     * @author wangzhi
     * @createDate 2019/03/12
     */
    Integer batchUpdate(List<Map<String,Object>> updateList);

    /**
     * <desc>
     *      查询单个设备授权码
     * </desc>
     *
     * @param codeId 授权码id
     * @return 单个设备授权码
     * @author wangzhi
     * @createDate 2019/03/12
     */
    DevicePadAuthCodePO getAuthCodeByCodeId(@Param("codeId") String codeId);

    /**
     * <desc>
     *      解绑（设备与设备授权码解除绑定）
     * </desc>
     *
     * @param devicePadAuthCodePO 更新参数
     * @return 单个设备授权码
     * @author wangzhi
     * @createDate 2019/03/12
     */
    Integer unbind(DevicePadAuthCodePO devicePadAuthCodePO);
}
